package cardsdk

import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
)

// encryptAES 使用AES加密明文并返回字节切片
func encryptAES(plaintext, key []byte) ([]byte, error) {
	block, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}
	// 对明文进行填充
	paddedPlaintext := pad(plaintext, aes.BlockSize)
	// 使用固定IV（确保长度为aes.BlockSize）
	iv := []byte("1234567890123456") // 示例固定IV，必须是16字节
	// 使用CBC模式加密
	ciphertext := make([]byte, aes.BlockSize+len(paddedPlaintext))
	copy(ciphertext[:aes.BlockSize], iv)
	mode := cipher.NewCBCEncrypter(block, iv)
	mode.CryptBlocks(ciphertext[aes.BlockSize:], paddedPlaintext)
	return ciphertext, nil
}

// pad 对输入数据进行PKCS7填充
func pad(src []byte, blockSize int) []byte {
	padding := blockSize - len(src)%blockSize
	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
	return append(src, padtext...)
}

const AesKey = "examplekey123456"

func GetBucket8(term string) int {
	key := []byte(AesKey) // 密钥长度必须为16、24或32字节
	ciphertext, err := encryptAES([]byte(term), key)
	if err != nil {
		panic(err)
	}
	last8 := ciphertext[len(ciphertext)-1]
	bucket8 := int(last8)
	return bucket8
}
